package com.lez.kotlincoroutine.activity

import android.os.AsyncTask
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.lez.kotlincoroutine.R
import com.lez.kotlincoroutine.api.ResponseBanner
import com.lez.kotlincoroutine.api.userServiceApi
import kotlinx.coroutines.*

//AsyncTask异步进行网络请求，与协程对比
/**
 *  阻塞和挂起的区别
 *  阻塞：阻塞是阻塞的主线程，主线程就停止运行了，会导致ANR，比如用Thread.sleep方法
 *  挂起：挂起不会阻塞主线程，挂起后主线程继续运行其他方法，等其他方法执行完后，再恢复挂起方法。
 */
class MainActivity :AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val nameTextView = findViewById<TextView>(R.id.nameTextView)
        nameTextView.text = "Jack"
        //also函数传递给匿名函数是it，返回值是this
        //异步的网络请求
        /*val submitButton = findViewById<Button>(R.id.submitButton).also {
            it.setOnClickListener{
               object : AsyncTask<Void,Void, ResponseBanner>(){
                   override fun doInBackground(vararg p0: Void?): ResponseBanner? {
                      return userServiceApi.loadBanner().execute().body()
                   }
                   override fun onPostExecute(result: ResponseBanner?) {
                       super.onPostExecute(result)
                       Log.i("info",result?.data.toString())
                       if(result!=null && result.data.size > 0){
                           nameTextView.text = result.data[0].title
                       }else{
                           nameTextView.text = "未获取到数据"
                       }
                   }
               }.execute()
            }
        }*/
        //协程版网络请求
        val submitButton = findViewById<Button>(R.id.submitButton).also {
            it.setOnClickListener{
//                GlobalScope.launch(Dispatchers.Main) {  //外边称为父协程
//                    val bannerResponse = withContext(Dispatchers.IO){  //协程的任务调度器，开启一个子线程去访问网络，成为子协程
//                         userServiceApi.getBanner();
//                    }
//                    nameTextView.text = bannerResponse.data[0].title
//                }
                val bannerResponse  = runBlocking {
                    userServiceApi.getBanner();
                }
                nameTextView.text = bannerResponse.data[0].title
            }
        }
    }
}